//引入express框架
const express = require('express');
//处理路径
const path = require('path');
//引入body—parser模块 用来处理post请求参数
const bodyParser = require('body-Parser');
//导入express-session模块
const session = require('express-session');
//导入art-template模板引擎
const template = require('art-template');
//引入dateFormat第三方模块
const dateFormat = require('dateFormat');
//导入Morgan第三方模块(打印请求信息)
const morgan = require('morgan');
//导入config第三方模块
const config = require('config');
//创建网站服务器
const app = express();
//处理post请求参数
app.use(bodyParser.urlencoded({extended: false}));
//配置session,saveUninitialized: false:不保存初始化cookie
app.use(session({
	secret: 'secret key',
    saveUninitialized: false,
    maxAge: 24 * 60 * 60 * 1000
}));
//导入数据库
require('./model/connect.js');
//导入用户集合
require('./model/user.js');
//配置模板位置
app.set('views', path.join(__dirname, 'views'));
//配置模板后缀
app.set('view engine', 'art');
//使用特定模板来渲染art模板
app.engine('art', require('express-art-template'));
//向模板内部导入dateFormat变量
template.defaults.imports.dateFormat = dateFormat;
//开放静态资源
app.use(express.static(path.join(__dirname, 'public')));
//p49(此电脑获取不到配置信息，且无论如何设置NODE_都显示生产环境)
console.log(config.get('title'));

// console.log(process.env.NODE_ENV);p47
//获取环境变量 返回值为对象
if (process.env.NODE_ENV == 'development') {
	console.log('当前是开发环境')
	//在开发环境中将客户端发送到服务端的请求信息打印到控制台中
	app.use(morgan('dev'))
} else {
	console.log('当前是生产环境')
}

//导入模块化路由
const home = require('./route/home.js');
const admin = require('./route/admin.js');
//拦截请求 判断用户登录状态
app.use('/admin', require('./middleware/loginGuard.js'));
//为路由匹配请求路径
app.use('/home', home);
app.use('/admin', admin);
//错误拦截
app.use((err, req, res, next) => {
	//将字符串对象转换为对象类型 JSON.parse()
	const result = JSON.parse(err);
	//{path: '/admin/user-edit', message: '密码比对失败，不能进行用户信息的修改', id: id};
	let params = [];
	for (let attr in result) {
		if (attr != 'path') {
			params.push(attr + '=' +result[attr]);
		}
	}
	res.redirect(`${result.path}?${params.join('&')}`);
})
//监听端口
app.listen(3000);
console.log('服务器启动成功，请访问localhost')